package util;

public class Paging {

	private boolean isPerPage;//이전으로 갈 수 있는 지를 구별
	private boolean isNextPgae;
	
	private int nowPage,rowTotal,blockList,blockpage,
	totalPage,startPage,endPage,startRow,endRow;
	
	//jsp에서 표현할 html코드 값을 가지는 변수 
	private StringBuffer sb;

	public Paging(int nowPage,int rowTotal,int blockList,int blockPage){
		
	
		
		isNextPgae = false;
		isPerPage = false;
		
		this.nowPage = nowPage;
		this.rowTotal = rowTotal;
		this.blockList = blockList;
		this.blockpage = blockPage;
		
		//입력된 전체 게시물의 수를 통해 전체 페이지 수를 
		//구한다.
		
		this.totalPage = rowTotal/blockList;
		if((rowTotal%blockList)!=0)
			totalPage++;
		
		//현재페이지가 전체페이지 수보다 크다면
		//전체 페이지 수로 걍제 조정한다 
		
		if(nowPage > totalPage){
			nowPage = totalPage;
		}
		//현재 페이지 수에 따라 시작 페이지 값과
		//현재 block의 마지막 페이지 값을 구한다.
		startPage = (int)((nowPage-1)/blockPage)*blockPage+1;
		endPage = startPage+blockPage-1;
		System.out.println("startPage : "+startPage);
		System.out.println("endPage : "+endPage);
		if(endPage>totalPage)
			endPage=totalPage;
		//현재 페이지 값에 따라 첫 게시물의 index 값을 구한다.
		startRow = (nowPage-1)*blockList;
		if(startRow==0)
			startRow =1;
		endRow = startRow+blockList-1;
		
		//시작페이지가 1보다 클경우 이전 페이지 기능을 
		//부여할 수 있도록 설정
		if(startPage>1)
			isPerPage = true;
		//마지막 페이지가 전체 페이지보다 작다면
		//다음 페이지 기능을 부여할수 있도록 하자 
		if(endPage < totalPage){
			isNextPgae = true;
		}	
		//-------------------------페이징에 필요한 기본 값 설정 끝-------------
			
			setNowPage(nowPage);
			setRowTotal(rowTotal);
			setBlockList(blockList);
			setBlockpage(blockPage);
			
			sb = new StringBuffer();
			//페이징에 필요한 html코드를 작성한다.
			if(startPage <blockPage){
				sb.append("<img src='images/button/but_prev.gif'>&nbsp;");
			}else{
				//이전 기능부여
				sb.append("<img src='images/button/but_prev.gif' ");
				sb.append("onclick=\"javascript:goAjax('getChapter.action','nowPage="+(nowPage-blockPage)+"',callBack,'post',true,'chapterPagingContent')");
				sb.append("\"' style='curssor:pointer'>&nbsp;");
			}
			
			sb.append("|");
			//페이지 번호 출력하는 반복문
			for(int i=startPage;i<=endPage;i++){
				if(i > totalPage){
					break;
				}
				if(i == nowPage){
					sb.append("&nbsp;&nbsp;<strong><span style='color:red'>");
					sb.append(i);
					sb.append("</span></strong>");
				}else{
					sb.append("&nbsp;&nbsp;<a href=\"javascript:goAjax('getChapter.action','nowPage="+i+"',callBack,'post',true,'chapterPagingContent') ");
					sb.append("\" >");
					sb.append(i);
					sb.append("</a>");

				}
			}//for문의 끝
			sb.append("&nbsp;|");
			
			if(endPage >=totalPage){
				sb.append("&nbsp;<img src='images/button/but_next.gif'>");
			}else{
				//이전 기능부여
				
				sb.append("&nbsp;<img src='images/button/but_next.gif' ");
				sb.append("onclick=\"javascript:goAjax('getChapter.action','nowPage="+(nowPage+blockPage)+"',callBack,'post',true,'chapterPagingContent') ");
				sb.append("\">");
			}
		}
	
	public boolean isPerPage() {
		return isPerPage;
	}

	public void setPerPage(boolean isPerPage) {
		this.isPerPage = isPerPage;
	}

	public boolean isNextPgae() {
		return isNextPgae;
	}

	public void setNextPgae(boolean isNextPgae) {
		this.isNextPgae = isNextPgae;
	}

	public int getNowPage() {
		return nowPage;
	}

	public void setNowPage(int nowPage) {
		this.nowPage = nowPage;
	}

	public int getRowTotal() {
		return rowTotal;
	}

	public void setRowTotal(int rowTotal) {
		this.rowTotal = rowTotal;
	}

	public int getBlockList() {
		return blockList;
	}

	public void setBlockList(int blockList) {
		this.blockList = blockList;
	}

	public int getBlockpage() {
		return blockpage;
	}

	public void setBlockpage(int blockpage) {
		this.blockpage = blockpage;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getStartPage() {
		return startPage;
	}

	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}

	public int getEndPage() {
		return endPage;
	}

	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}

	public int getStartRow() {
		return startRow;
	}

	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}

	public int getEndRow() {
		return endRow;
	}

	public void setEndRow(int endRow) {
		this.endRow = endRow;
	}

	public StringBuffer getSb() {
		return sb;
	}

	public void setSb(StringBuffer sb) {
		this.sb = sb;
	}
	
	
}
